﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServicioActualizacion.ReferenciaSimulador;
using System.Data;
using System.Data.Linq;
using AccesoDatos;

namespace ServicioActualizacion
{
    class Actualizacion
    {
        // Milisegundos que se esperan para la actualizacion -> levantado del App.config
        private int _cantMiliSegundos;

        #region Inicializacion
        public Actualizacion(int cantMiliSegundos)
        {
            // Agregar cualquier codigo de inicializacion que necesite el servicio
            _cantMiliSegundos = cantMiliSegundos;
        }
        #endregion

        #region Thread del servicio

        public void CorrerActualizacion()
        {
            while (true)
            {
                // Primero consultamos servicio de COME para obtener datos de las ultimas posiciones de los bondis
                using (AccesoDatos.EntidadesDataContext edc = new AccesoDatos.EntidadesDataContext())
                {
                    var lineas = (from l in edc.LINEAs
                                  select l).ToArray();


                    foreach (var linea in lineas)
                    {
                        ServiceSoapClient ssc = new ServiceSoapClient();
                        DataTable infoLinea = ssc.devolverInformacionLinea(linea.LINEA_ID);

                        // Recorro las rows y genero nuevas entidades
                        foreach (DataRow infoRow in infoLinea.Rows)
                        {
                            POSICION_OMNIBUS po = new POSICION_OMNIBUS();
                            po.EMPRESA_ID = (int)infoRow["empresa"];
                            po.LINEA_ID = (int)infoRow["codLinea"];
                            po.OMNIBUS_ID = (int)infoRow["idOmnibus"];
                            po.PO_ASCENDENTE = infoRow["sentido"].Equals("A");
                            po.PO_DIA = (int)DateTime.Now.DayOfWeek;
                            po.PO_FECHA = DateTime.Now;
                            po.PO_HORA = po.PO_FECHA.TimeOfDay;
                            po.PO_LATITUD = (double)infoRow["y"];
                            po.PO_LONGITUD = (double)infoRow["x"];
                            po.SUBLINEA_ID = (int)infoRow["codSubLinea"];
                            po.VARIANTE = infoRow["variante"] as string;
                            po.ID_VUELTA = (int)infoRow["idvuelta"];
                            edc.POSICION_OMNIBUS.InsertOnSubmit(po);

                            edc.SubmitChanges();
                        }

                    } 
                }

                


                // Fin de actualizacion -> espero _cantMiliSegundos milisegundos para la proxima
                System.Threading.Thread.Sleep(_cantMiliSegundos);
            }
        }

        #endregion

    }
}
